package com.skyeye.mapper;

import com.skyeye.entity.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 用户数据访问层接口（注解方式 - 简化版）
 * 利用mybatis-config.xml中配置的mapUnderscoreToCamelCase自动映射
 * 无需@Results注解，代码更简洁
 */
@Mapper
public interface UserMapperAnnotationSimple {
    
    /**
     * 插入用户
     * @param user 用户对象
     * @return 影响行数
     */
    @Insert("INSERT INTO users (username, email, age, phone, create_time, update_time) " +
            "VALUES (#{username}, #{email}, #{age}, #{phone}, #{createTime}, #{updateTime})")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int insertUser(User user);
    
    /**
     * 根据ID删除用户
     * @param id 用户ID
     * @return 影响行数
     */
    @Delete("DELETE FROM users WHERE id = #{id}")
    int deleteUserById(@Param("id") Integer id);
    
    /**
     * 更新用户信息
     * @param user 用户对象
     * @return 影响行数
     */
    @Update("UPDATE users SET username = #{username}, email = #{email}, " +
            "age = #{age}, phone = #{phone}, update_time = #{updateTime} WHERE id = #{id}")
    int updateUser(User user);
    
    /**
     * 根据ID查询用户
     * 利用mapUnderscoreToCamelCase自动映射，无需@Results注解
     * @param id 用户ID
     * @return 用户对象
     */
    @Select("SELECT * FROM users WHERE id = #{id}")
    User selectUserById(@Param("id") Integer id);
    
    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户对象
     */
    @Select("SELECT * FROM users WHERE username = #{username}")
    User selectUserByUsername(@Param("username") String username);
    
    /**
     * 查询所有用户
     * @return 用户列表
     */
    @Select("SELECT * FROM users ORDER BY id")
    List<User> selectAllUsers();
    
    /**
     * 根据年龄范围查询用户
     * @param minAge 最小年龄
     * @param maxAge 最大年龄
     * @return 用户列表
     */
    @Select("SELECT * FROM users WHERE age >= #{minAge} AND age <= #{maxAge} ORDER BY age")
    List<User> selectUsersByAgeRange(@Param("minAge") Integer minAge, @Param("maxAge") Integer maxAge);
    
    /**
     * 统计用户总数
     * @return 用户总数
     */
    @Select("SELECT COUNT(*) FROM users")
    int countUsers();
    
    /**
     * 根据用户名模糊查询
     * @param username 用户名关键字
     * @return 用户列表
     */
    @Select("SELECT * FROM users WHERE username LIKE CONCAT('%', #{username}, '%') ORDER BY id")
    List<User> selectUsersByUsernameLike(@Param("username") String username);
}
